SPB Git forge

spb/spinza

Public
8commits 1branches 0releases
1.6 MBsize
maindefault branch
16 days agolast push
TypeScript 97.6% SQL 1.4% JavaScript 0.5%
1.5 KB · 28 lines tsx
Raw Blame History
1import type { Metadata } from "next";2import { notFound } from "next/navigation";3import { apiServer } from "@/lib/api-server";4import type { GameInfo } from "@spinza/shared";5import type { ArcadeGameDefinition, CrashGameDefinition } from "@spinza/game-core/client";6import type { ClientDefinition } from "@/components/game/types";7import { GameClient } from "@/components/game/game-client";8import { CrashClient } from "@/components/crash/crash-client";9import { ArcadeClient } from "@/components/arcade/arcade-client";1011type Params = { params: Promise<{ slug: string }> };1213export async function generateMetadata({ params }: Params): Promise<Metadata> {14  const { slug } = await params;15  const data = await apiServer<{ game: GameInfo }>(`/api/games/${slug}`);16  if (!data) return { title: "Game not found" };17  return { title: `${data.game.name} — play free`, description: data.game.description, robots: { index: false } };18}1920export default async function GamePage({ params }: Params) {21  const { slug } = await params;22  const data = await apiServer<{ game: GameInfo; definition: ClientDefinition | CrashGameDefinition | ArcadeGameDefinition }>(`/api/games/${slug}`);23  if (!data) notFound();24  if (data.game.kind === "crash") return <CrashClient game={data.game} definition={data.definition as CrashGameDefinition} />;25  if (data.game.kind === "arcade") return <ArcadeClient game={data.game} definition={data.definition as ArcadeGameDefinition} />;26  return <GameClient game={data.game} definition={data.definition as ClientDefinition} />;27}28